package com.qingfeng.core.dao;

import com.github.pagehelper.PageInfo;
import com.qingfeng.core.config.database.BaseMapper;
import com.qingfeng.core.entity.Userinfo;
import com.qingfeng.core.mapper.UserinfoMapper;
import com.qingfeng.core.utils.DesUtil;
import com.qingfeng.core.utils.UuidUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.entity.Example;

import java.util.*;

/**
 * @description: 用户dao
 * @author:LWY
 * @date: 2017/10/16 17:15
 * @modified:
 */
@Repository
public class UserinfoDao extends BaseDao<Userinfo> {

    @Autowired
    UserinfoMapper userinfoMapper;

    @Override
    protected BaseMapper<Userinfo> getBaseMapper() {
        return userinfoMapper;
    }

    /**
     * 获取用户信息
     *
     * @param username 用户名
     * @param pwd      密码
     * @return
     */
    public Userinfo getUser(String username, String pwd) {
        Userinfo userinfo = new Userinfo();
        userinfo.setUsername(username);
        userinfo.setPwd(pwd);
        return userinfoMapper.selectOne(userinfo);
    }


    /**
     * 分页获取用户列表
     *
     * @param pageNum  页码
     * @param pageSize 每页条数
     * @param username 用户名
     * @param state    用户状态
     * @return
     */
    public PageInfo<Userinfo> get(Integer pageNum, Integer pageSize, String username, String state) {
        Example example = new Example(Userinfo.class);
        Example.Criteria criteria = example.createCriteria();
        if (StringUtils.isNotEmpty(username)) {
            criteria.andLike("username", "%" + username + "%");
        }
        if (StringUtils.isNotEmpty(state)) {
            criteria.andCondition("state=", state);
        }
        return super.get(pageNum, pageSize, example);
    }

    public Userinfo save(String id, String username, String pwd, String create_id) {
        //数据库里面存的是用户名+密码MD5的组合加密串
        Userinfo userinfo = new Userinfo();
        userinfo.setUsername(username);
        if (StringUtils.isNotEmpty(pwd)) {
            pwd = DesUtil.encryptBasedDes(pwd);
            userinfo.setPwd(pwd);
        }
        if (StringUtils.isNotEmpty(id)) {
            //修改
            userinfo.setId(id);
            userinfoMapper.updateByPrimaryKeySelective(userinfo);
        } else {
            //添加
            id = UuidUtil.generatorUUID();
            userinfo.setId(id);
            userinfo.setCreate_id(create_id);
            userinfo.setCreate_time(new Date());
            userinfoMapper.insertSelective(userinfo);
        }
        return userinfoMapper.selectByPrimaryKey(id);
    }

    /**
     * 删除用户
     *
     * @param ids id集合
     */
    @Override
    public int del(String[] ids) {
        //先删除角色用户关联关系，后删除用户，注意顺序不能乱
        delRole(ids);
        return super.del(ids);
    }

    /**
     * 删除用户所有的角色
     *
     * @param ids 用户id 逗号隔开
     */
    private void delRole(String[] ids) {
        String s = Arrays.toString(ids);
        userinfoMapper.delRole(s.substring(1, s.length() - 1));
    }

    public void saveRole(String userinfo_id, String[] role_ids, String create_id) {
        //先删除所有授权
        delRole(new String[]{userinfo_id});
        List<Map> list = new ArrayList<>();
        if (role_ids == null) {
            return;
        }
        for (String role_id : role_ids) {
            Map<String, Object> map = new HashMap();
            map.put("userinfo_id", userinfo_id);
            map.put("role_id", role_id);
            map.put("create_id", create_id);
            list.add(map);
        }
        userinfoMapper.saveRole(list);
    }
}
